import numpy as np

# 创建数组
arr1 = np.array([1, 2, 3])  # 一维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])  # 二维数组

print("一维数组:", arr1) # [1 2 3]
print("二维数组:\n", arr2) # [[1, 2, 3], [4, 5, 6]]

# 数组属性
print("数组形状:", arr2.shape)  # 输出(2, 3)
print("数组维度:", arr2.ndim)  # 输出2
print("数组元素总数:", arr2.size)  # 输出6
print("数组数据类型:", arr2.dtype)  # 输出int64

# 创建特殊数组
zeros = np.zeros((3, 3))  # 全零数组
ones = np.ones((2, 4))    # 全一数组
eye = np.eye(3)           # 单位矩阵
random = np.random.rand(2, 3)  # 随机数组

print("\n全零数组:\n", zeros)
'''
全零数组:
 [[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''
print("全一数组:\n", ones)
'''
全一数组:
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]]
'''
print("单位矩阵:\n", eye)
'''
单位矩阵:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
'''
print("随机数组:\n", random)
'''
随机数组:
 [[0.23870807 0.72669649 0.33226946]
 [0.84853164 0.44800991 0.02008005]]
'''

# 数组运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print("\n数组加法:", a + b)  # 逐元素相加
'''
数组加法: [5 7 9]
'''
print("数组乘法:", a * b)  # 逐元素相乘
'''
数组乘法: [ 4 10 18]
'''
print("数组点积:", np.dot(a, b))  # 点积
'''
数组点积: 32
'''
print("数组平方:", a**2)  # 平方
'''
数组平方: [1 4 9]
'''

# 数组切片和索引
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print("\n第二行:", arr[1])  # 第二行
'''
第二行: [4 5 6]
'''
print("第二列:", arr[:, 1])  # 第二列
'''
第二列: [2 5 8]
'''
print("子矩阵:\n", arr[0:2, 1:3])  # 子矩阵
'''
子矩阵:
 [[2 3]
 [5 6]]
'''

# 条件索引
print("大于5的元素:", arr[arr > 5])
'''
大于5的元素: [6 7 8 9]
'''

# 数组变形
arr = np.arange(12)
print("\n原始数组:", arr)
'''
原始数组: [ 0  1  2  3  4  5  6  7  8  9 10 11]
'''
reshaped = arr.reshape(3, 4)  # 变形为3行4列
print("变形后数组:\n", reshaped)
'''
变形后数组:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 '''

# 数组拼接
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

print("\n垂直拼接:\n", np.vstack((a, b)))
'''
垂直拼接:
 [[1 2]
 [3 4]
 [5 6]
 [7 8]]
'''
print("水平拼接:\n", np.hstack((a, b)))
'''
水平拼接:
 [[1 2 5 6]
 [3 4 7 8]]
'''

# 实际应用场景
# 场景1: 图像处理 - 图像可以表示为三维数组(高度, 宽度, 通道)
image = np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)  # 模拟100x100 RGB图像

# 场景2: 科学计算 - 矩阵运算
A = np.random.rand(100, 100)
B = np.random.rand(100, 100)
C = np.dot(A, B)  # 矩阵乘法

# 场景3: 数据分析 - 数值计算
data = np.array([1, 2, 3, 4, 5])
# np.mean() 函数用于计算数据数组中元素的算术平均值。对于数组 [1， 2， 3， 4， 5]，其平均值计算为 (1 + 2 + 3 + 4 + 5) / 5 = 3
mean = np.mean(data)
# np.std() 函数用于计算数据数组中元素的标准差。标准差用于衡量数据集中的变异或离散程度。对于数组 [1， 2， 3， 4， 5]，其标准差约为 1.41421356。
std = np.std(data)
